<?php

namespace WebExpres\Templates\TplamericaBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\RedirectResponse;

class FunctionsController extends Controller
{
    
    public function controlOpcio() {
        
        // Faig consulta de la taula configuracio
        
        $em = $this->getDoctrine()->getEntityManager();
        $Resultats = $em->getRepository('ConfigBundle:Config')->findAll();
        
        $retornar = 0;
        
        foreach ($Resultats as $Resultat) {
            
            if ($Resultat->getValor() == 1 || $Resultat->getValor() == 2) {
                
                $retornar = $Resultat->getValor();
                
            }

        }
       
        return $retornar;
        
    }
    
    public function controlIdiomes($idhotel, $idioma) {
        
        $em = $this->getDoctrine()->getEntityManager();
        
        if ($idioma != "") {
            
            // Paso valor $idioma
            
            // Agafo el urlcodigo per mirar el id
            $Language = $em->getRepository('ConfigBundle:language')->findOneByUrlcodigo($idioma);
            
            if (!is_object($Language)) {
                
                throw $this->createNotFoundException('El idioma no existe');
                
            }
            
            $ididioma = $Language->getId();
            
            // Aqui comprovare, si el idioma esta publicat
            $Idioma = $em->getRepository('HotelBundle:HotelesIdioma')->findOneBy(
                array('idhotel' => $idhotel, 'ididioma' => $ididioma, 'published' => 1)
            );
            
            if (count($Idioma) != 0) {
                
                $ididioma = $Idioma->getIdidioma();
                $urlcodigo = $idioma;
                
                $retornArray = array();
                
                $retornArray[0] = $ididioma;
                $retornArray[1] = $urlcodigo;
                
                //echo "Existeix";
                return $retornArray;
                
            } else {
                
                throw $this->createNotFoundException('El idioma no existe'); 
                
            }
            
        } else {
            
            // No paso valor $idioma
            
            $Idioma = $em->getRepository('HotelBundle:HotelesIdioma')->findOneBy(
                array('idhotel' => $idhotel, 'langdefault' => 1, 'published' => 1)
            );
            
            if (count($Idioma) != 0) {
                
                $ididioma = $Idioma->getIdidioma();
                
                $Language = $em->getRepository('ConfigBundle:language')->find($ididioma);
                
                $urlcodigo = $Language->getUrlcodigo();
                
                $retornArray = array();
                
                $retornArray[0] = $ididioma;
                $retornArray[1] = $urlcodigo;
                
                //echo "Existeix";
                return $retornArray;
                
            } else {
                
                throw $this->createNotFoundException('El idioma no existe'); 
                
            }
            
        }
        
    }
    
    public function IdiomesDisponibles($idhotel) {
        
        $em = $this->getDoctrine()->getEntityManager();
        $Idiomes = $em->getRepository('HotelBundle:HotelesIdioma')->findBy(
            array('idhotel' => $idhotel, 'published' => 1)
        );
        
        if (count($Idiomes) != 0) {
            
            $IdiomesArray = array();
            
            foreach($Idiomes as $i => $Idioma) {
                
                $Language = $em->getRepository('ConfigBundle:language')->find($Idioma->getIdidioma());
                
                $IdiomesArray[$i]['ididioma'] = $Idioma->getIdidioma();
                $IdiomesArray[$i]['idioma'] = $Language->getIdioma();
                $IdiomesArray[$i]['codigo'] = $Language->getCodigo();
                
            }
            
            return $IdiomesArray;

        } else {
            
            return 0;
            
        }
        
    }
    
    public function montaArbre($idhotel, $ididioma) {
        
        $em = $this->getDoctrine()->getEntityManager();
        $relacions = $em->getRepository('ContentBundle:SeccionRelation')->findSeccionsByIdhotel($idhotel);
        
        // Aqui comprovo si hi ha alguna relacio
        if (isset($relacions)) {
        
            // Hi ha relacions
        
            $PrincipalArray = array();
            $RelacioArray = array();
            $OrderArray = array();

            foreach($relacions as $i => $relacio) {

                $PrincipalArray[$relacio->getIdseccion()] = $relacio->getIdseccion();
                $RelacioArray[$relacio->getIdsecfill()][$relacio->getIdseccion()] = $relacio->getIdseccion();
                $OrderArray[$relacio->getIdsecfill()][$relacio->getIdseccion()] = $relacio->getPosition();

            }
            
            $ProfMaxi = count($RelacioArray);

            $ResultatArray = array();
            $PosicioArray = array();

            $SenseRelacioArray = array();
            $Relacionats = array();

            foreach($PrincipalArray as $Principal) {

                if (array_key_exists($Principal, $RelacioArray)) {

                    $Relacionats[$Principal] = $Principal;

                } else {

                    $SenseRelacioArray[$Principal] = $Principal;

                }

            }

            if (isset($RelacioArray[0])) {

                // esta definit

                $PosPrincipal = $RelacioArray[0];

                foreach($PosPrincipal as $Principal) {

                    if (array_key_exists($Principal, $RelacioArray)) {

                        foreach($RelacioArray[$Principal] as $Fill) {
                            
                            $ResultatArray[$Principal][$Fill] = $Fill;
                            $PosicioArray[$Principal][$Fill] = 1;

                            $valor = $Fill;

                            // Aqui recorro la primera volta

                            for($b=2;$b<$ProfMaxi;$b++) {

                                if (!array_key_exists($valor, $SenseRelacioArray)) { 

                                    $c = 1;

                                    $totalRelacioArray = count($RelacioArray[$valor]);

                                    foreach ($RelacioArray[$valor] as $aveure) {

                                        // Aqui tinc que controlar si l'array segueix
                                        $ResultatArray[$Principal][$aveure] = $aveure;
                                        $PosicioArray[$Principal][$aveure] = $b;

                                        //echo $aveure;
                                        if ( ($c!=$totalRelacioArray) && (array_key_exists($aveure, $Relacionats)) ) {
                                            
                                            $PosTempArray = $ProfMaxi - $b;

                                            $TempArray[$PosTempArray][0] = $valor;
                                            $TempArray[$PosTempArray][1] = $b;

                                            $valor = $aveure;
                                            $ControlSub = 1;
                                            
                                            break;
                                        } 

                                        $valor = $aveure;

                                        $c++;

                                    }

                                }

                            }

                            // Fi recorro la primera volta
                            
                            // Aqui començo les altres voltes
                            
                            if (isset($ControlSub)) {

                                if ($ControlSub == 1) {

                                    // Ordeno l'array segons els index

                                    //ksort($TempArray);

                                    // Aqui fare la segona volta amb els temporals

                                    foreach($TempArray as $Temp) {

                                        $valor = $Temp[0];

                                        for($b=$Temp[1];$b<$ProfMaxi;$b++) {
                                            
                                            if (!array_key_exists($valor, $SenseRelacioArray)) { 

                                                $c = 1;

                                                $totalRelacioArray = count($RelacioArray[$valor]);

                                                foreach ($RelacioArray[$valor] as $aveure) {

                                                    if (!array_key_exists($aveure, $ResultatArray)) {
                                                        // Aqui tinc que controlar si l'array segueix
                                                        $ResultatArray[$Principal][$aveure] = $aveure;
                                                        $PosicioArray[$Principal][$aveure] = $b;

                                                        $valor = $aveure;

                                                    }

                                                }

                                            }

                                        }

                                    }

                                    unset($TempArray);
                                    unset($ControlSub);

                                    // Fi Aqui fare la segona volta amb els temporals

                                }

                            }
                            
                            // Aqui començo les altres voltes

                        }

                    }

                }
                
                //Aqui montare el array bo

                $CategoriesFinalArray = array();

                $k = 0;

                foreach ($RelacioArray[0] as $CatePrincipals) {

                    $TradusSeccio = $this->getSeccionsTradus($CatePrincipals, $ididioma);

                    if (!is_int($TradusSeccio)) {
                        
                        if ($TradusSeccio->getPublished() == 1) {
                                    
                            if ($TradusSeccio->getVisible() == 1) {

                                $noTeTraduccio = 0;

                                $Anterior = 0;

                                $em = $this->getDoctrine()->getEntityManager();
                                $esPare = $em->getRepository('ContentBundle:SeccionRelation')->findSeccionsMaxPosition($CatePrincipals, $idhotel);

                                if (count($esPare) != 0) {
                                    // Es papa
                                    $esPapa = 1;
                                } else {
                                    // No es papa
                                    $esPapa = 0;
                                }

                                $CategoriesFinalArray[$k]['id'] = $CatePrincipals;
                                $CategoriesFinalArray[$k]['pos'] = 0;
                                $CategoriesFinalArray[$k]['anterior'] = $Anterior;
                                $CategoriesFinalArray[$k]['idtradu'] = $TradusSeccio->getId();
                                $CategoriesFinalArray[$k]['text'] = $TradusSeccio->getNomseccion();
                                $CategoriesFinalArray[$k]['published'] = $TradusSeccio->getPublished();
                                $CategoriesFinalArray[$k]['visible'] = $TradusSeccio->getVisible();
                                $CategoriesFinalArray[$k]['notraduccio'] = $noTeTraduccio;
                                $CategoriesFinalArray[$k]['pare'] = $esPapa;

                                if (array_key_exists($CatePrincipals, $ResultatArray)) {

                                    foreach($ResultatArray[$CatePrincipals] as $Resultat) {

                                        $TradusSeccio = $this->getSeccionsTradus($Resultat, $ididioma);

                                        if (!is_int($TradusSeccio)) {

                                            if ($TradusSeccio->getPublished() == 1) {

                                                if ($TradusSeccio->getVisible() == 1) {

                                                    $k++;

                                                    $noTeTraduccio = 0;                                    

                                                    $em = $this->getDoctrine()->getEntityManager();
                                                    $AnteriorObjecte = $em->getRepository('ContentBundle:SeccionRelation')->findOneByIdseccion($Resultat);

                                                    $Anterior = $AnteriorObjecte->getIdsecfill();

                                                    $Posicio = $PosicioArray[$CatePrincipals][$Resultat];

                                                    $em = $this->getDoctrine()->getEntityManager();
                                                    $esPare = $em->getRepository('ContentBundle:SeccionRelation')->findSeccionsMaxPosition($Resultat, $idhotel);

                                                    if (count($esPare) != 0) {
                                                        // Es papa
                                                        $esPapa = 1;
                                                    } else {
                                                        // No es papa
                                                        $esPapa = 0;
                                                    }

                                                    $CategoriesFinalArray[$k]['id'] = $Resultat;
                                                    $CategoriesFinalArray[$k]['pos'] = $Posicio;
                                                    $CategoriesFinalArray[$k]['anterior'] = $Anterior;
                                                    $CategoriesFinalArray[$k]['idtradu'] = $TradusSeccio->getId();
                                                    $CategoriesFinalArray[$k]['text'] = $TradusSeccio->getNomseccion();
                                                    $CategoriesFinalArray[$k]['published'] = $TradusSeccio->getPublished();
                                                    $CategoriesFinalArray[$k]['visible'] = $TradusSeccio->getVisible();
                                                    $CategoriesFinalArray[$k]['notraduccio'] = $noTeTraduccio;
                                                    $CategoriesFinalArray[$k]['pare'] = $esPapa;

                                                }

                                            }

                                        }

                                    }

                                }

                                $k++;
                        
                            }
                            
                        }                        
                    
                    }

                }

                return $CategoriesFinalArray;

            } else {

                // No esta definit
                return 0;

            }
        
        } else {
            
            // No hi ha relacions
            return 0;
            
        }        
   
    }
    
    private function getSeccionsTradus($idseccion, $ididioma) {
        
        $em = $this->getDoctrine()->getEntityManager();
        $TraduSeccions = $em->getRepository('ContentBundle:SeccionTradus')->findSeccionsIdSeccion($idseccion, $ididioma);
        
        
        if (count($TraduSeccions) != 0) {
           
            foreach($TraduSeccions as $TraduSeccion) {
            
                $resultat = $TraduSeccion;
            
            } 
            
            return $resultat;
        
        } else {
            
            return 0;
            
        }
        
    }
    
}
